/**
 * Koa 运作的方式
 *
 *   注: 跟 app.use 执行的先后顺序有关
 */
const koa = require('koa');
const app = koa();

// x-response-time
app.use(function *(next) {
    console.log('(1) 进入路由');
    var start = new Date();
    yield next;
    console.log('(5) 再次进入 x-response-time 中间件, 记录2次通过此中间件[穿越]的时间');
    var ms = new Date - start;
    this.set('X-Response-Time', ms + 'ms');
});

// logger
app.use(function *(next) {
    console.log('(2) 进入 logger 中间件');
    var start = new Date;
    yield next;
    console.log('(4) 再次进入 logger 中间件，记录2次通过此中间件「穿越」的时间');
    var ms = new Date - start;
    console.log(`${this.method} ${this.url} - ${ms}`);
});

// response
app.use(function *() {
    console.log('(3) 进入 response 中间件，没有捕获到下一个符合条件的中间件，传递到 upstream');
    this.body = 'Hello World';
});

app.listen(3000);